/*
单例模式（Singleton Pattern）是一种创建型设计模式，它确保一个类只有一个实例，并提供全局访问点来访问该实例。
单例模式通常用于需要共享资源或全局状态的情况，以确保只有一个实例存在，避免资源的重复创建和状态的不一致。

在单例模式中，类的构造函数被设为私有，以防止外部代码直接创建实例。
而通过一个静态方法或静态变量来控制实例的创建和访问。
当第一次调用该方法时，会创建一个实例，并将其保存在静态变量中，以后的调用将直接返回该实例。

以下是一个使用单例模式实现的C语言例程：
*/

// #include <stdio.h>
// #include <stdlib.h>

#define NULL 0

// 定义单例类
typedef struct
{
    int value;
} Singleton;

// 静态变量，用于保存单例实例
static Singleton *instance = NULL;

// 获取单例实例的方法
Singleton *getSingletonInstance()
{
    // 如果实例不存在，则创建一个新实例
    if (instance == NULL)
    {
        instance = (Singleton *)malloc(sizeof(Singleton));
        instance->value = 0;
    }
    return instance;
}

int main()
{
    // 获取单例实例
    Singleton *singleton1 = getSingletonInstance();
    Singleton *singleton2 = getSingletonInstance();

    // 修改实例的值
    singleton1->value = 10;

    // 输出实例的值
    printf("Singleton value: %d\n", singleton2->value); // 输出结果为 10

    return 0;
}

/*
在上面的例程中，定义了一个名为Singleton的结构体，用于表示单例类。
通过getSingletonInstance函数来获取单例实例，如果实例不存在，则创建一个新实例，并将其保存在静态变量instance中。
在main函数中，通过两次调用getSingletonInstance来获取单例实例，然后修改其中一个实例的值，并输出另一个实例的值。
由于只有一个实例存在，所以输出结果为10。

需要注意的是，单例模式在多线程环境下可能会出现竞态条件（Race Condition）的问题，需要考虑线程安全性。
可以使用互斥锁（Mutex）或双重检查锁（Double-Checked Locking）等机制来解决多线程访问的同步问题。
*/